package conservare.dao;

import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;

import conservare.modelo.banco.CarteiraBoleto;
import conservare.modelo.banco.SequencialBoleto;
import conservare.modelo.banco.SequencialBoletoPK;
import conservare.modelo.boleto.BoletoEmitido;

public class BoletoDAO extends Dao {

	private static final long serialVersionUID = 433679486378774107L;

	
	public BoletoEmitido salvar(BoletoEmitido boleto) {
		
		EntityTransaction transaction = getEm().getTransaction();
		transaction.begin();
		
		if(boleto.getId() == null)
			getEm().persist(boleto);
		else
			getEm().merge(boleto);
		
		transaction.commit();
		
		return boleto;
	}

	public void salvarSequencialBoleto(SequencialBoleto sequencialBoleto) {
		
		EntityTransaction transaction = getEm().getTransaction();
		transaction.begin();
		
		if(sequencialBoleto.getId() == null)
			getEm().persist(sequencialBoleto);
		else
			getEm().merge(sequencialBoleto);
		
		transaction.commit();
		
	}
	
	
	
	public SequencialBoleto getSequencialBoleto(CarteiraBoleto carteiraBoleto){
		SequencialBoletoPK sequencialBoletoPK = new SequencialBoletoPK(carteiraBoleto);
		return getPojo(SequencialBoleto.class, sequencialBoletoPK);
	}
	
	public SequencialBoleto atualizarSequencialNossoNumero(SequencialBoleto nossoNumeroBancario) {
		
		EntityTransaction transaction = getEm().getTransaction();
		transaction.begin();
		
		if(nossoNumeroBancario.getId() == null)
			getEm().persist(nossoNumeroBancario);
		else
			getEm().merge(nossoNumeroBancario);
		
		transaction.commit();
		
		return nossoNumeroBancario;
		
	}
	
	/*public Integer gerarSequencialNossoNumeroBancario(Carteira carteira){
		return ControleNossoNumeroBoleto.gerarSequencialNossoNumeroBancario(carteira);
	}*/
	
	
	public BoletoEmitido obterBoletoPeloNossoNumero(String numeroDoBanco, String nossoNumero) throws NoResultException {
		
		return getPojo(BoletoEmitido.class, "select a from InfoBoleto a where a.contaBancaria.agencia.banco.numeroDoBanco = ?1  and a.nossoNumero = ?2 ", numeroDoBanco,nossoNumero);
		
	}
}
